#include "beepwindow.h"
#include "ui_beepwindow.h"
extern "C"
{
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
}

BeepWindow::BeepWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::BeepWindow)
{
    ui->setupUi(this);
    show_back_gif();
    // 打开蜂鸣器的驱动文件
    fd = open("/dev/beep", O_RDWR);
    if(fd == -1)
    {
        perror("open:");
    }
}

BeepWindow::~BeepWindow()
{
    delete ui;
}

//显示动态背景图
void BeepWindow::show_back_gif()
{
    QMovie *movepic = new QMovie(QString::fromLocal8Bit(":/new/prefix1/back.gif"));
    movepic->setScaledSize(ui->backGif->size());
    ui->backGif->setMovie(movepic);
    movepic->start();
}

//点击开启或关闭蜂鸣器--切换按键的状态
void BeepWindow::on_beep_btn_clicked()
{
    if(flag == 0)//开灯
    {
        // 将颜色效果应用到按钮
        QGraphicsColorizeEffect* effect = new QGraphicsColorizeEffect(this);
        effect->setColor(QColor(0, 255, 255)); // 天蓝色
        effect->setStrength(1.0);
        ui->beep_btn->setGraphicsEffect(effect);
        flag = 1;
        //开启蜂鸣器
        ioctl(fd, Beep_ON, 1);
    }
    else//关灯
    {
        // 将颜色效果应用到按钮
        ui->beep_btn->setGraphicsEffect(nullptr);
        flag = 0;
        //关闭蜂鸣器
        ioctl(fd, Beep_OFF, 1);

    }
}

//返回上个界面--功能界面
void BeepWindow::on_return_btn_clicked()
{
    //因为在跳转时，记录了上一个界面
    //所以可以利用此函数获取当前窗口的父窗口对象指针
    QWidget *parent = this->parentWidget();

    parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
    //关闭蜂鸣器--避免在蜂鸣器开启时返回上一个界面，蜂鸣器一直响
    ioctl(fd, Beep_OFF, 1);
    this->close();//关闭当前界
}
